package it.csi.finregio.finreges.dto;

import java.io.Serializable;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

public class Riferimento implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3721134046619701657L;
	private String idRiferimento;
	private Scheda scheda;
	private TipoRiferimento tipoRiferimento;
	private String altroRiferimento;
	private String data;
	private String numeroArticolo;
	private String numeroAtto;
	private String comma;
	private String commaAggiuntivo;
	private String lettera;
	private String pubblicazione;
	private String noteRiferimenti;

	public String getIdRiferimento() {
		return idRiferimento;
	}

	public void setIdRiferimento(String idRiferimento) {
		this.idRiferimento = idRiferimento;
	}

	public Scheda getScheda() {
		return scheda;
	}

	public void setScheda(Scheda scheda) {
		this.scheda = scheda;
	}

	public TipoRiferimento getTipoRiferimento() {
		return tipoRiferimento;
	}

	public void setTipoRiferimento(TipoRiferimento tipoRiferimento) {
		this.tipoRiferimento = tipoRiferimento;
	}

	public String getAltroRiferimento() {
		return altroRiferimento;
	}

	public void setAltroRiferimento(String altroRiferimento) {
		this.altroRiferimento = altroRiferimento;
	}

	public String getData() {
		return data;
	}

	public void setData(String data) {
		this.data = data;
	}

	public String getNumeroArticolo() {
		return numeroArticolo;
	}

	public void setNumeroArticolo(String numeroSrticolo) {
		this.numeroArticolo = numeroSrticolo;
	}

	public String getNumeroAtto() {
		return numeroAtto;
	}

	public void setNumeroAtto(String numeroAtto) {
		this.numeroAtto = numeroAtto;
	}

	public String getComma() {
		return comma;
	}

	public void setComma(String comma) {
		this.comma = comma;
	}

	public String getCommaAggiuntivo() {
		return commaAggiuntivo;
	}

	public void setCommaAggiuntivo(String commaAggiuntivo) {
		this.commaAggiuntivo = commaAggiuntivo;
	}

	public String getLettera() {
		return lettera;
	}

	public void setLettera(String lettera) {
		this.lettera = lettera;
	}

	public String getPubblicazione() {
		return pubblicazione;
	}

	public void setPubblicazione(String pubblicazione) {
		this.pubblicazione = pubblicazione;
	}

	public String getNoteRiferimenti() {
		return noteRiferimenti;
	}

	public void setNoteRiferimenti(String noteRiferimenti) {
		this.noteRiferimenti = noteRiferimenti;
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return new ToStringBuilder(this).append("scheda", this.scheda).append(
				"lettera", this.lettera).append("tipoRiferimento",
				this.tipoRiferimento).append("idRiferimento",
				this.idRiferimento).append("data", this.data).append(
				"pubblicazione", this.pubblicazione).append("numeroSrticolo",
				this.numeroArticolo).append("noteRiferimenti",
				this.noteRiferimenti).append("commaAggiuntivo",
				this.commaAggiuntivo).append("numeroAtto", this.numeroAtto)
				.append("altroRiferimento", this.altroRiferimento).append(
						"comma", this.comma).toString();
	}

	public String getDescrizioneEstesa() {
		StringBuffer sb = new StringBuffer();
		if (getTipoRiferimento()!=null && !getTipoRiferimento().getIdTipoRiferimento().equals("-999")) {
			sb.append(getTipoRiferimento().getValore()).append(" del ").append(
					data).append(" n. ").append(getNumeroAtto());
			if (getNumeroArticolo() != null
					&& !getNumeroArticolo().trim().equals("")) {
				sb.append(" art. ").append(getNumeroArticolo());
			}
			if (getComma() != null && !getComma().trim().equals("")) {
				sb.append(" c. ").append(getComma());
			}
			if (getCommaAggiuntivo() != null
					&& !getCommaAggiuntivo().trim().equals("")) {
				sb.append(" ").append(getCommaAggiuntivo());
			}
			if (getLettera() != null && !getLettera().trim().equals("")) {
				sb.append(" lett ").append(getLettera());
			}
		}
		else{
			sb.append(getAltroRiferimento());
		}
		return sb.toString();
	}

	/**
	 * @see java.lang.Object#equals(Object)
	 */
	public boolean equals(Object object) {
		if (!(object instanceof Riferimento)) {
			return false;
		}
		Riferimento rhs = (Riferimento) object;
		boolean isEquals = false;
		if (getAltroRiferimento() != null
				&& !getAltroRiferimento().trim().equals("")) {
			isEquals = new EqualsBuilder().appendSuper(super.equals(object))
					.append(this.pubblicazione, rhs.pubblicazione).append(
							this.noteRiferimenti, rhs.noteRiferimenti).append(
							this.tipoRiferimento, rhs.tipoRiferimento).append(
							this.altroRiferimento, rhs.altroRiferimento)
					.isEquals();
		}
		isEquals = new EqualsBuilder().appendSuper(super.equals(object))
				.append(this.comma, rhs.comma).append(this.numeroAtto,
						rhs.numeroAtto).append(this.pubblicazione,
						rhs.pubblicazione).append(this.noteRiferimenti,
						rhs.noteRiferimenti).append(this.lettera, rhs.lettera)
				.append(this.tipoRiferimento.getIdTipoRiferimento(),
						rhs.tipoRiferimento.getIdTipoRiferimento()).append(
						this.data, rhs.data).append(this.commaAggiuntivo,
						rhs.commaAggiuntivo).append(this.numeroArticolo,
						rhs.numeroArticolo).isEquals();
		return isEquals;
	}

	/**
	 * @see java.lang.Object#hashCode()
	 */
	public int hashCode() {
		return new HashCodeBuilder(1992497227, 1515607033).appendSuper(
				super.hashCode()).append(this.comma).append(this.numeroAtto)
				.append(this.scheda).append(this.pubblicazione).append(
						this.noteRiferimenti).append(this.lettera).append(
						this.tipoRiferimento).append(this.data).append(
						this.commaAggiuntivo).append(this.altroRiferimento)
				.append(this.idRiferimento).append(this.numeroArticolo)
				.toHashCode();
	}
}
